package br.com.webprojeto.colecoes;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

import br.com.webprojeto.basicas.*;
import br.com.webprojeto.interfaces.*;

public class ColecaoCliente implements InterfaceColecaoCliente {

	
	public void adicionarCliente(Cliente P) {
		Session sessao = HibernateUtil.getSessionFactory().openSession();
		sessao.beginTransaction();
		sessao.saveOrUpdate(P);
		sessao.getTransaction().commit(); 
	}
	 
	
	public void removerCliente(long codCliente) {
		Session sessao = HibernateUtil.getSessionFactory().openSession();
		sessao.beginTransaction();
		Cliente p = (Cliente) sessao.load(Cliente.class, codCliente);
		sessao.delete(p);
		sessao.getTransaction().commit();
	}
	 
	
	public void atualizarCliente(Cliente P) {
		Session sessao = HibernateUtil.getSessionFactory().openSession();
		sessao.beginTransaction();
		sessao.update(P);
		sessao.getTransaction().commit();
	}
	 
	
	public Cliente procurarCliente(long codCliente) {
		Session sessao = HibernateUtil.getSessionFactory().openSession();
		sessao.beginTransaction();
		Cliente P = (Cliente) sessao.load(Cliente.class, codCliente);
		sessao.getTransaction().commit();
		
		return P;

		
	}
	
	@Override
	public Cliente localizarCliente(String cpfCnpj) {
		
		Cliente c = localizarClienteCpf(cpfCnpj);
		
		if(c!=null)
			return c;
		else
			return localizarClienteCnpj(cpfCnpj);
	}
	 
	
	public List<Cliente> listarCliente() {
		Session sessao = HibernateUtil.getSessionFactory().openSession();
		sessao.beginTransaction();
		Query consulta = sessao.createQuery("from Cliente");
		return consulta.list();
	}
	
	public Cliente localizarClienteCpf(String cpf) {
		Session sessao = HibernateUtil.getSessionFactory().openSession();
		sessao.beginTransaction();
		Query consulta = sessao.createQuery("from Fisica where cpf like ?");
		consulta.setParameter(0, cpf);
		Cliente p = (Cliente) consulta.uniqueResult();
		sessao.getTransaction().commit();
		return p;
	}
	
	public Cliente localizarClienteCnpj(String cnpj) {
		Session sessao = HibernateUtil.getSessionFactory().openSession();
		sessao.beginTransaction();
		Query consulta = sessao.createQuery("from Juridica where cnpj like ?");
		consulta.setParameter(0, cnpj);
		Cliente p = (Cliente) consulta.uniqueResult();
		sessao.getTransaction().commit();
		return p;
	}
}
